/**
 * Vue Router 路由配置
 * 定义应用的所有页面路由、导航守卫、页面权限等
 */

import { createRouter, createWebHistory } from 'vue-router'

/**
 * 创建路由实例
 * history: 使用 HTML5 History 模式（需要服务器配置支持）
 */
const router = createRouter({
  history: createWebHistory(),
  routes: [
    // ============ 公开页面（无需登录）============
    
    /**
     * 首页 - LandingPage
     * 介绍平台功能、用户评价、常见问题等
     */
    {
      path: '/',
      name: 'LandingPage',
      component: () => import('@/views/LandingPage.vue'),
      meta: { title: '孤独症家庭干预平台' }
    },
    
    /**
     * 登录页
     */
    {
      path: '/login',
      name: 'Login',
      component: () => import('@/views/Login.vue'),
      meta: { title: '登录' }
    },
    
    /**
     * 注册页
     */
    {
      path: '/register',
      name: 'Register',
      component: () => import('@/views/Register.vue'),
      meta: { title: '注册' }
    },
    
    /**
     * 忘记密码页
     */
    {
      path: '/forgot-password',
      name: 'ForgotPassword',
      component: () => import('@/views/ForgotPassword.vue'),
      meta: { title: '忘记密码' }
    },
    
    // ============ 主应用（需要登录）============
    
    /**
     * 主应用布局
     * 包含侧边栏、顶部导航、内容区域
     * 所有需要登录的页面都是其子路由
     */
    {
      path: '/app',
      component: () => import('@/layouts/MainLayout.vue'),
      redirect: '/app/dashboard',  // 默认重定向到首页
      children: [
        /**
         * 首页/仪表盘
         * 展示今日任务、完成进度、能力统计等核心数据
         */
        {
          path: 'dashboard',
          name: 'Dashboard',
          component: () => import('@/views/Dashboard.vue'),
          meta: { 
            title: '首页', 
            icon: 'HomeFilled'  // 侧边栏显示的图标
          }
        },
        
        /**
         * 任务库
         * 1000+ 专业任务的浏览、筛选、自定义
         */
        {
          path: 'task-library',
          name: 'TaskLibrary',
          component: () => import('@/views/TaskLibrary.vue'),
          meta: { title: '任务库', icon: 'Reading' }
        },
        
        /**
         * 任务分配
         * 创建训练计划，为孩子分配任务
         */
        {
          path: 'task-assign',
          name: 'TaskAssign',
          component: () => import('@/views/TaskAssign.vue'),
          meta: { title: '任务分配', icon: 'Calendar' }
        },
        
        /**
         * 计划详情
         * 查看具体计划的任务列表和执行情况
         * hideInMenu: 不在侧边栏菜单中显示
         */
        {
          path: 'plan-detail/:id',  // 动态路由参数 :id
          name: 'PlanDetail',
          component: () => import('@/views/PlanDetail.vue'),
          meta: { 
            title: '计划详情', 
            hideInMenu: true  // 隐藏在侧边栏菜单中
          }
        },
        
        /**
         * 打卡页面
         * 完成任务打卡，上传照片记录
         */
        {
          path: 'check-in',
          name: 'CheckIn',
          component: () => import('@/views/CheckIn.vue'),
          meta: { title: '打卡', icon: 'CircleCheck' }
        },
        
        /**
         * 进度中心
         * 查看多领域能力曲线、领域统计
         */
        {
          path: 'progress-center',
          name: 'ProgressCenter',
          component: () => import('@/views/ProgressCenter.vue'),
          meta: { title: '进度中心', icon: 'TrendCharts' }
        },
        
        /**
         * 历史记录
         * 查看所有打卡历史、照片记录
         */
        {
          path: 'task-history',
          name: 'TaskHistory',
          component: () => import('@/views/TaskHistory.vue'),
          meta: { title: '历史记录', icon: 'Clock' }
        },
        
        /**
         * 成长盒
         * 收藏已掌握的任务，记录成长印记
         */
        {
          path: 'growth-box',
          name: 'GrowthBox',
          component: () => import('@/views/GrowthBox.vue'),
          meta: { title: '成长盒', icon: 'Box' }
        }
      ]
    }
  ]
})

/**
 * 全局前置路由守卫
 * 在每次路由跳转前执行，用于：
 * 1. 设置页面标题
 * 2. 验证用户登录状态
 * 3. 权限控制
 */
router.beforeEach((to, from, next) => {
  // 从本地存储获取 Token，判断用户是否已登录
  const token = localStorage.getItem('token')
  
  // 设置页面标题（显示在浏览器标签页上）
  if (to.meta.title) {
    document.title = to.meta.title
  }
  
  // 定义公开页面列表（无需登录即可访问）
  const publicPages = ['/', '/login', '/register', '/forgot-password']
  const isPublicPage = publicPages.includes(to.path)
  
  // 如果是公开页面
  if (isPublicPage) {
    // 已登录用户访问登录/注册页，自动跳转到首页
    if ((to.path === '/login' || to.path === '/register') && token) {
      next('/app/dashboard')
    } else {
      next()  // 放行
    }
  } 
  // 如果是需要登录的页面
  else {
    if (token) {
      next()  // 已登录，放行
    } else {
      next('/login')  // 未登录，跳转到登录页
    }
  }
})

// 导出路由实例
export default router
